iT邦幫忙

DAY 14
2

只談MySQL系列 第 14

只談MySQL (第14天) 資料維護指令 Data Manupulation Statement

  • 分享至 

  • xImage
  •  

相較於昨天的Data Definition Statements, Data Manipulation Statements相較之下少很多

  1. CALL
    呼叫Stored Procedure執行的指令, 完整語法為
    CALL sp_name([parameter[,...]])
    CALL sp_name[()]
    例如
    CALL p;
    CALL p(a, b, c);
  2. DELETE: 刪除資料錄的指令
  3. DO
    完整指令為
    DO expr [, expr] ...
    就相當於
    SELECT expr [, expr] ...
    是做數值指定運算用的
    例: DO a = 10;
  4. HANDLER
    完整指令有
    HANDLER tbl_name OPEN [ [AS] alias]
    HANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)
    [ WHERE where_condition ] [LIMIT ... ]
    HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]
    HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]
    HANDLER tbl_name CLOSE
    有些像是Snapshot的應用, 提一個到資料表的快速存取通道.
    HANDLER ... READ...
    很像是SELECT指令的作用, 但因為是直接讀取資料表內容, 所以速度快很多
  5. INSERT: 新增資料錄的指令
  6. LOAD DATA INFILE
    完整指令為
    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
    [TERMINATED BY 'string']
    [[OPTIONALLY] ENCLOSED BY 'char']
    [ESCAPED BY 'char']
    ]
    [LINES
    [STARTING BY 'string']
    [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]
    是直接把外部檔案內容讀入存到資料表中的指令, 例如Excel檔案, 可以另存為CSV格式的檔案, 再用LOAD DATA INFILE指令轉入資料表中
  7. REPLACE
    完整指令為
    REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    這在有Primary Key設置的資料表中新增一筆資料時特別有用...
    例如Sales_Order_Header表中有SalesID欄位且為Primary Key
    INSERT INTO Sales_Order_Header VALUES ('10001', 'Simon', ... )
    INSERT INTO Sales_Order_Header VALUES ('10001', 'Johnson', ....)
    此時第二個INSERT會導致Duplicate Key的錯誤訊息而停止作業
    我們可以:
    REPLACE INTO Sales_Order_Header VALUES ('10001', 'Johnson', ...)
    這樣可以把10001銷貨單的訂購人變更為Johnson...而不會出現錯誤訊息.
    如果
    REPLACE INTO Sales_Order_Header VALUES ('10002', 'Simon', ...)
    這樣會把10002銷貨單新增到Sales_Order_Header中
  8. SELECT: 查詢資料的指令
  9. Subquery:
    舉個簡單的例子
    DELETE FROM t1
    WHERE s11 > ANY
    (SELECT COUNT(*) /* no hint */ FROM t2
    WHERE NOT EXISTS
    (SELECT * FROM t3
    WHERE ROW(5*t2.s1,77)=
    (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
    (SELECT * FROM t5) AS t5)));
    出現在WHERE條件下的SELECT句子就是Subquery
    Subquery可以另外一篇專門討論, 我們明天就針對SUbquery做個討論
  10. TRUNCATE: 清除資料表的指令
  11. UPDATE: 更新資料錄的指令, REPLACE指令很類似, 但可新增資料錄

上一篇
只談MySQL (第十三天) 更多資料定義的指令
下一篇
只談MySQL (第15天) Subquery
系列文
只談MySQL30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言